package utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.*;

/**
 * @ClassName JwtUtil
 * 身份验证令牌
 * @Author 23207
 * @Date 2025/4/18 9:56
 * @Version 1.0
 */
public class JwtUtil {
  private static String SECRET_KEY_ENV_VAR = "fanxulundiyiciceshijwtlingpaideshiyongfangshi"; // 密钥
  private static final Date JWT_EXPIRATION = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7); // 设置有效期时长 7 天
  private static String secretKeyJwt; // 保存jwt

  /**
   * 生成 JWT
   *
   * @param claims 自定义声明
   * @return 生成的 JWT 字符串
   */
  public static String createToken(Map<String, Object> claims) {
    //生成Jwt令牌
    secretKeyJwt = Jwts.builder()
            .signWith(SignatureAlgorithm.HS256, SECRET_KEY_ENV_VAR) //签名算法
            .setClaims(claims) //设置自定义内容
            .setIssuedAt(new Date()) //设置签发时间
            .setExpiration(JWT_EXPIRATION) //设置过期时间为7天后
            .compact();
    return secretKeyJwt;
  }

  /**
   * 解析 JWT
   *
   * @param token 待解析的 JWT 字符串
   * @return 解析后的 Claims 对象
   */
  public static Claims parseToken(String token){
    Claims claims = Jwts.parser()
            .setSigningKey(SECRET_KEY_ENV_VAR)
            .parseClaimsJws(token)
            .getBody();
    return claims;
  }
}

// public class JwtUtil {
//   private static String SECRET_KEY = "secret_key"; // 密钥
//   private static final long EXPIRE_TIME = 1000 * 60 * 60 * 24; // 1天
//   private static String secretKeyJwt;
//
//   // 生成JWT令牌
//   public static String createToken(Map<String, Object> claims) {
//     secretKeyJwt = Jwts.builder()
//             .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
//             .setClaims(claims)
//             .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
//             .setIssuedAt(new Date())
//             .compact();
//     return secretKeyJwt;
//   }
//
//   // 解析JWT令牌
//   public static Claims parseToken(String token) {
//     // 使用Jwts解析器解析JWT令牌
//     Claims claims = Jwts.parser()
//             // 设置签名密钥
//             .setSigningKey(SECRET_KEY)
//             // 解析JWT令牌
//             .parseClaimsJws(token)
//             // 获取JWT令牌中的主体信息
//             .getBody();
//
//     return claims;
//   }
//
// }
